Github

这次我们来看看异常处理和异步处理,顺带 Lambda 语法。

异常处理

Lite 沿用了现代面向对象语言的 try catch 机制,不同的是使用 ! 来表达语法,不需要 try、catch、finally 这几个关键字。

! {
    # 此区域内所有逻辑都会被监听异常 #
    do_something()
} ex IOException {  # 捕获IO异常 #
    throw(ex)  # 继续抛出异常 #
} e {  # 可以省略类型,捕获默认异常 #
    throw(e)
} _ {
    # 无论如何都会执行的操作,可以用来释放资源 #
}

资源回收处理

计算机有很多资源都是需要使用完毕后立即释放的,在这里可以使用资源处理语法 ! id = value 语法声明资源,逻辑离开区域后就会自动释放,避免了手动控制。

! file = open_file("./test.lite")
# 逻辑处理完后自动释放 file #

Lambda 语法

上一次我们讲过如何传递函数类型的参数,除了直接使用预先定义好的函数标识符,我们还可以直接创建匿名函数 。

useFunction( (i int ->) {
    do_something()
})

当然了,这种方式有点啰嗦。我们既然知道了函数的具体类型,就可以交给编译器去分析声明,用更简单的 Lambda 语法 { id -> } 来帮我们声明函数。

useFunction( { i -> 
    do_something()
})

嗯,简单多了。

如果执行的函数只有一个函数参数,我们甚至可以省略外面的括号。

useFunction{ i -> do_something() }

这样就很棒了是不是?

异步处理

Lite 采用了现代的 async/await 语法进行异步逻辑处理。

语法很简单,还记得我们在函数中使用的箭头 -> 吗?我们只要改成 ~> 就声明了async函数。

do_something(~>) {
}

async函数可以在内部使用异步等待语法 <~ 来执行其它的async函数。

它会自动包装返回值,使得可以用同步调用的语法来调用异步功能,简化了我们使用多线程的方式。

main(~>) {
    value = <~ do_something()
}
do_something(~> v int) {
    <~ sleep(1000)
    <- 1
}

同样道理,我们在 Lambda 中也可以这样使用异步处理

do_something{ ~>
    <~ sleep(1000)
}

结尾

以上就是 Lite 异常处理和异步处理的语法,对比起其它语言的语法是否更简洁呢?
下一次我们会来看看可选类型和泛型语法。


kulics
0 声望0 粉丝